package Presentacion.Cliente;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.RowFilter;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import java.awt.event.KeyListener;

import Fisica.ClienteFisica;
import Hibernate.Cliente;
import java.util.List;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class ClienteBuscar extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JTable jTClienteBuscar;
	private JTextField jTFClienteBuscarFiltro;
	
	public DefaultTableModel model = new DefaultTableModel();
	public TableRowSorter<TableModel> modeloOrdenado; //usado para ordenar en el filtrado
	
	/**Atributos de alinear tablas*/	
	private DefaultTableCellRenderer alinearCentro, alinearDerecha, alinearIzquierda;
	
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			ClienteBuscar dialog = new ClienteBuscar();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
			dialog.setLocationRelativeTo(null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	public ClienteBuscar() {
//inicializo alineaciones de tabla.
		this.initAlineacionTablas();
		
		setTitle("Buscar Cliente");
		setBounds(100, 100, 550, 380);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		
		JScrollPane jSPTablaClienteBuscar = new JScrollPane();
		jSPTablaClienteBuscar.setBounds(10, 11, 522, 309);
		contentPanel.add(jSPTablaClienteBuscar);
		
		jTClienteBuscar = new JTable();
		jTClienteBuscar.setToolTipText("Seleccione un cliente");

		jSPTablaClienteBuscar.setViewportView(jTClienteBuscar);
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setBounds(0, 319, 542, 34);
			contentPanel.add(buttonPane);
			buttonPane.setLayout(null);
			{
				JButton okButton = new JButton("Aceptar");
				okButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						aceptar();
					}
				});
				okButton.setBounds(370, 5, 80, 23);
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						cerrar();
					}
				});
				cancelButton.setBounds(457, 5, 80, 23);
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
			
			jTFClienteBuscarFiltro = new JTextField();
			jTFClienteBuscarFiltro.setToolTipText("Buscar en la tabla");
			jTFClienteBuscarFiltro.setBounds(10, 5, 110, 23);
			buttonPane.add(jTFClienteBuscarFiltro);
			jTFClienteBuscarFiltro.setColumns(10);
		}
//cargo tabla con datos de clientes.
		this.initTablaListarCliente();
		
//eventos teclado
		this.eventoTeclado();
		this.autoFiltro();	
		
	}
	
	/**CARGA TABLAS LISTA DE CLIENTES*/
    public void initTablaListarCliente(){
		model = new DefaultTableModel(
				new Object[][] {
						{null, null, null, null, null},
						{null, null, null, null, null},
					},
					new String[] {
						"Apellido", "Nombre", "Direcci\u00F3n", "Tel\u00E9fono", "E-mail"
					}
				) {
					Class[] columnTypes = new Class[] {
						String.class, String.class, String.class, String.class, String.class
					};
					//esta clase permite visualizar el checkbox en la tabla
					public Class getColumnClass(int columnIndex) {return columnTypes[columnIndex];}
				  };	
		jTClienteBuscar.setModel(model);	 
		//esto me limpia la tabla cada vez que hago un listado nuevo
		model.setRowCount(0);
		
		List<Cliente>listCli = null;
		listCli = ClienteFisica.list();
		for (Cliente x : listCli) {
			 model.addRow(new Object[] { 
					 x.getApellido(), 
					 x.getNombre(), 
					 x.getDireccion(), 
					 x.getTelefono(), 
					 x.getEmail() });
			 }	
		
		jTClienteBuscar.setToolTipText("Lista de Clientes");
		jTClienteBuscar.getColumnModel().getColumn(0).setCellRenderer(alinearDerecha); //asigno alineacion centrada
		jTClienteBuscar.getColumnModel().getColumn(1).setCellRenderer(alinearDerecha); //asigno alineacion centrada
		jTClienteBuscar.getColumnModel().getColumn(2).setCellRenderer(alinearCentro); //asigno alineacion centrada
		jTClienteBuscar.getColumnModel().getColumn(3).setCellRenderer(alinearCentro); //asigno alineacion centrada
		}
    
/**FIN CARGA TABLAS LISTA DE CLIENTES*/		
 
    
    /*Inicializo y cargo alineaci�n de conlumnas en tablas*/	
	public void initAlineacionTablas(){
		alinearCentro = new DefaultTableCellRenderer();
		alinearDerecha = new DefaultTableCellRenderer();
		alinearIzquierda = new DefaultTableCellRenderer();
		
        alinearCentro.setHorizontalAlignment(SwingConstants.CENTER);
        alinearDerecha.setHorizontalAlignment(SwingConstants.RIGHT);
        alinearIzquierda.setHorizontalAlignment(SwingConstants.LEFT);
	}
	
/**  METODOS PARA FILTRAR LISTAS*/	
/*filtros: paso el texto capturado y la tabla a la cual se le aplica el filtro*/
		private void filtrarTabla(JTextField jtf, DefaultTableModel modEdit, JTable jtable) {
	        //codigo de filtro
			TableRowSorter<TableModel> modeloOrdenadoEdit = new TableRowSorter(modEdit);
	    	String fil = jtf.getText();//.toLowerCase();
	    	//filtrar todas las filas que tengan el texto "fil", sin discriminar minusculas de mayusculas.
	    	if (fil.length() != 0){
//anda perfecto con minuscula y mayuscula gracias al "(?i)".
	    		modeloOrdenadoEdit.setRowFilter (RowFilter.regexFilter("(?i)"+fil+"*.")); 
	        }else{//reestablezco la tabla original, buscando con vacio.
	        	modeloOrdenadoEdit.setRowFilter (RowFilter.regexFilter(""));        	
	    	}
	    	jtable.setRowSorter (modeloOrdenadoEdit);
	    	
	    }
		
	private void autoFiltro(){
		jTFClienteBuscarFiltro.addKeyListener(new KeyListener()
		{
			public void keyReleased(KeyEvent arg0) 
			{	//paso como parametro, el JTField, DefaultTableModel, JTable
				filtrarTabla(jTFClienteBuscarFiltro, model, jTClienteBuscar);		}

			@Override
			public void keyPressed(KeyEvent e) {		}

			@Override
			public void keyTyped(KeyEvent e) {		}
    });
	}
	
//cerrar.	
	public void cerrar(){
		this.dispose();
	}
	
//devolver la fila seleccionada.	
	public void aceptar(){
		System.out.println("ACEPTAR");
	}
	
	
	private void eventoTeclado() {

		 /** evento escape*/
			        KeyListener keyListenerEscape = new KeyAdapter() {
			            public void keyPressed(KeyEvent evt) {
			                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
			                	cerrar();
			                }
			            }
			        };
		/** evento enter*/
			        KeyListener keyListenerEnter = new KeyAdapter() {
			            public void keyPressed(KeyEvent evt) {
			                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
//			                    int i = 0;
//			                	guardar(null);
			                }
			            }
			        };
		/** evento de filtro de tablas listar de cada modulo*/
			        KeyListener keyListenerFiltroCliente = new KeyAdapter() {
			            public void keyPressed(KeyEvent evt) {
			                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
			                	filtrarTabla(jTFClienteBuscarFiltro, model, jTClienteBuscar);
			                }
			            }
			        };

			        
		/**ASIGNO EVENTOS TECLADO*/
		//EVENTOS CON ENTER
//			        panelCenter.addKeyListener(keyListenerEnter);
		//FIN EVENTOS CON ENTER
			        
		//EVENTOS CON ESCAPE
//			        panelCenter.addKeyListener(keyListenerEscape);
		//FIN EVENTOS CON ESCAPE
		        
		//EVENTOS CON ENTER
			        jTFClienteBuscarFiltro.addKeyListener(keyListenerFiltroCliente);
		//FIN EVENTOS CON ENTER       
			      //EVENTOS CON F1 AYUDA        
			      //EVENTOS CON F2 EDITAR
			      //EVENTOS CON F3 BUSCAR
			      //EVENTOS CON F4 NUEVO
			      //EVENTOS CON F5 ACTUALIZAR
			      //EVENTOS CON F10 GUARDAR E IMPRIMIR
			      //EVENTOS CON F
			      //EVENTOS CON F
			        
			        
		       
			    
	}
    
}
